# koroFileHeader at Home PC
# Create: 2022-03-31 08:48:15
# LastEdit: 2022-03-31 12:06:11
"""配置中使用的自定义类和函数"""
__author__ = '749B'

from markdown.extensions.toc import slugify
from pelican import Pelican, ArticlesGenerator
from pypinyin import lazy_pinyin

# 单独修改Article里的排序
# MyPelican 负责导入 MyArticlesGenerator 而不是默认的 ArticlesGenerator
# MyArticlesGenerator 负责自定义排序
class MyPelican(Pelican):

    def __init__(self, settings):
        print("注意: 加载的是自定制的类, 在 pelican.Pelican 的基础上重构.")
        super().__init__(settings)

    def _get_generator_classes(self):
        """通过这个方法来加载其它需要重构的类"""
        generators = super()._get_generator_classes()
        # 替换原本的 ArticlesGenerator
        generators[0] = MyArticlesGenerator
        return generators

class MyArticlesGenerator(ArticlesGenerator):

    def __init__(self, *args, **kwargs):
        print("注意: 加载的是自定制的类, 在 pelican.generators.ArticlesGenerator 的基础上重构.")
        super().__init__(*args, **kwargs)
        
    def generate_context(self):
        super().generate_context()
        # 之前已经都按照 ARTICLE_ORDER_BY 参数做了排序
        # 按类别（Category）展示的时候，以创建时间（Date）做降速排列 
        for _, arts in self.categories:
            arts.sort(key=lambda x: x.date, reverse=True)
        # 打印进行验证
        # print('\n'.join([ '{} {}'.format(art.date, art.title)  for cat, arts in self.categories if cat.name == '学习笔记' for art in arts ]))


# 修改锚点使用的标识，标识需要友好，仅能使用字母、数字、下划线、横杠
# 默认方法slugify是把其他字符都去掉，重名会添加序号
# 中文标题生成的锚点就会变成空字符，生成大量无意义的数字锚点标识
# slugify_pinyin 先转成拼音，避免都是纯序号的无意义锚点
def slugify_pinyin(value, separator='-'):
    """ 先将中文转换成拼音，再生成锚点 """
    value = ' '.join(lazy_pinyin(value))
    return slugify(value, separator)


if __name__ == '__main__':
    value = 'This is 锚点 测试 TEST.'
    value = "自定义mark标记"
    print(slugify_pinyin(value))
